package controller

import (
	"fmt"
	"go_web/src/domain"
	"go_web/src/services"
	"strconv"

	"github.com/gin-gonic/gin"
)

type UserController struct {
	us services.UserService
}

func NewUserController(us services.UserService) *UserController {
	return &UserController{us: us}
}

func (uc UserController) CreateUser(c *gin.Context) {
	fmt.Printf("完整请求路径是：%s", c.FullPath())

	//body参数
	var user domain.User
	err := c.ShouldBindJSON(&user)
	if err != nil {
		c.JSON(200, gin.H{
			"code":    500,
			"message": "示例数据",
			"data":    "",
		})
		return
	}

	er := uc.us.Create(&user)
	if er != nil {
		return
	}

	data := gin.H{
		"id":      1,
		"title":   "1.0",
		"name":    "张三",
		"message": "示例数据",
	}

	// 根据 Accept 头返回不同格式
	switch c.GetHeader("Accept") {
	case "application/xml":
		c.XML(200, data)
	case "application/yaml":
		c.YAML(200, data)
	case "text/html":
		c.HTML(200, "index.html", data)
	default:
		c.JSON(200, data) // 默认返回 JSON
	}
}

func (uc UserController) GetUser(c *gin.Context) {
	//查询参数
	id := c.DefaultQuery("id", "1")
	fmt.Println(id)

	val, err := strconv.ParseUint(id, 10, 32)
	if err != nil {
		c.JSON(200, gin.H{
			"code":    500,
			"message": "示例数据",
			"data":    "",
		})
		return
	}

	user, err := uc.us.FindByID(uint(val))
	if err != nil {
		c.JSON(200, gin.H{
			"code":    500,
			"message": "示例数据",
			"data":    "",
		})
		return
	}
	c.JSON(200, gin.H{
		"code":    200,
		"message": "查询成功",
		"data":    user,
	})
}

func (uc UserController) DeleteUser(c *gin.Context) {
	//路径参数
	id := c.Param("id")
	fmt.Println(id)

	val, err := strconv.ParseUint(id, 10, 32)
	if err != nil {
		c.JSON(200, gin.H{
			"code":    500,
			"message": "示例数据",
			"data":    "",
		})
		return
	}

	_ = uc.us.DeleteByID(uint(val))
}

func (uc UserController) UpdateUser(c *gin.Context) {
	//body参数
	var user domain.User
	err := c.ShouldBindJSON(&user)
	if err != nil {
		c.JSON(200, gin.H{"code": 500,
			"message": "示例数据",
			"data":    ""})
	}
	err = uc.us.UpdateByID(user.Id, user.Name)
	if err != nil {
		return
	}
}
